table of contents
CHMOD(2) | Руководство программиста Linux | CHMOD(2) |
НАЗВАНИЕ¶
chmod, fchmod - изменить права доступа к файлу
ОБЗОР¶
#include <sys/types.h>
#include <sys/stat.h>
int chmod(const char *path, mode_t
mode);
int fchmod(int fildes, mode_t mode);
ОПИСАНИЕ¶
Изменяет права доступа к файлу, заданному параметром path или файловым дескриптором fildes.
Права задаются применением логической операции OR (битовое сложение -- прим. пер.) к следующим константам:
- S_ISUID
- 04000 установить при выполнении идентификатор пользователя (suid бит -- прим.пер.)
- S_ISGID
- 02000 установить при выполнении идентификатор группы (sgid бит -- прим.пер.)
- S_ISVTX
- 01000 sticky бит
- S_IRUSR (S_IREAD)
- 00400 владелец может читать
- S_IWUSR (S_IWRITE)
- 00200 владелец может писать
- S_IXUSR (S_IEXEC)
- 00100 владелец может выполнять файл или искать в каталоге
- S_IRGRP
- 00040 группа-владелец может читать
- S_IWGRP
- 00020 группа-владелец может писать
- S_IXGRP
- 00010 группа-владелец может выполнять файл или искать в каталоге
- S_IROTH
- 00004 все остальные могут читать
- S_IWOTH
- 00002 все остальные могут писать
- S_IXOTH
- 00001 все остальные могут выполнять файл или искать в каталоге
Эффективный идентификатор пользователя (UID) для вызывающего процесса должен быть нулем или совпадать с UID владельца файла.
Если эффективный UID процесса не равен нулю, а группа-владелец файла не совпадает с фактическим GID процесса или одним из его дополнительных GID'ов, то бит S_ISGID будет сброшен, но ошибки при этом не возникнет.
В зависимости от файловой системы, suid и sgid биты могут быть сброшены, когда происходит запись в файл. На некоторых файловых системах только суперпользователь может устанавливать sticky бит, который может иметь специальное значение. О значении sticky бита, а также suid и sgid битов на каталоги, см. stat(2). На файловых системах NFS отмена некоторых прав доступа немедленно повлияет на открытые файлы, потому что контроль доступа осуществляется сервером, а открытые файлы обрабатываются клиентом. Добавление новых прав доступа может произойти не сразу, если на клиенте включено кэширование атрибутов.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
В случае успеха возвращается ноль. При ошибке возвращается -1, а errno устанавливается должным образом.
ОШИБКИ¶
В зависимости от файловой системы могут также появиться другие ошибки. Общий набор ошибок для chmod таков:
- EPERM
- Фактический UID не совпадает с владельцем файла и не равен нулю.
- EROFS
- Файл находится на файловой системе, смонтированной только для чтения.
- EFAULT
- path указывает за пределы доступного адресного пространства.
- ENAMETOOLONG
- path слишком длинно.
- ENOENT
- Файл не существует.
- ENOMEM
- Ядру не хватило памяти.
- ENOTDIR
- Компонент пути, использованный как каталог в path, в действительности таковым не является.
- EACCES
- Запрещен поиск в одном из каталогов, находящихся на пути к файлу.
- ELOOP
- При обработке path встречено слишком много символических ссылок.
- EIO
- Произошла ошибка ввода-вывода.
Общий набор ошибок для fchmod таков:
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Системный вызов chmod соответствует стандартам SVr4, SVID, POSIX, X/OPEN, 4.4BSD. SVr4 документирует EINTR, ENOLINK и EMULTIHOP, но не документирует ENOMEM. POSIX.1 не документирует ни коды ошибок EFAULT, ENOMEM, ELOOP и EIO, ни макросы S_IREAD, S_IWRITE и S_IEXEC.
Системный вызов fchmod соответствует 4.4BSD и SVr4. SVr4 документирует дополнительные коды ошибок EINTR и ENOLINK. POSIX требует присутствия функции fchmod, если определены символы _POSIX_MAPPED_FILES или _POSIX_SHARED_MEMORY_OBJECTS, и документирует дополнительные коды ошибок ENOSYS и EINVAL, но не документирует EIO.
POSIX и X/OPEN не документируют sticky бит.
СМОТРИ ТАКЖЕ¶
ПЕРЕВОД¶
Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999, Виктор Вислобоков <corochoone@perm.ru> 2003
1997-12-10 | Linux 2.0.32 |